package cn.tedu.boyou.acticle.service;

import cn.tedu.boyou.acticle.domain.DestTheme;
import cn.tedu.boyou.acticle.domain.Destination;
import cn.tedu.boyou.common.query.DestThemeQuery;
import cn.tedu.boyou.common.query.DestinationExtendQuery;
import cn.tedu.boyou.common.query.QueryObject;
import com.github.pagehelper.PageInfo;

import java.util.List;
import java.util.Map;

/**
 * 提供目的地主题相关服务
 */
public interface IDestThemeService {

    /**
     *  查询出推荐，显示在页面上的目的地主题分类。查询的是一级主题。
     * @param num 查询多少个推荐出来的目的地主题分类
     * @return 目的地主题集合
     */
    List<DestTheme> listTopTheme(int num);

    /**
     * 根据父主题的id查询其下的所有子主题集合
     * @param themeId 父主题id
     * @return 子主题集合
     */
    List<DestTheme> getSubthemesByThemeId(Long themeId);

    /**
     * 查询出目的地主题分类，用Map将其和其下的所有子主题对应起来
     * @param num 查询前多少个目的地主题分类
     * @return 目的地主题分类和其下的子主题的map集合
     */
    List<Map<DestTheme,List<DestTheme>>> listTopThemesWithSubThemes(int num);

    /**
     * 查询出所有的目的地子主题
     * @return 目的地子主题列表
     */
    List<DestTheme> listSubTheme();

    /**
     * 查询满足条件的所有目的地主题，分页显示
     * @param qo
     * @return
     */
    PageInfo<DestTheme> query(DestThemeQuery qo);

    /**
     * 更加主键id查询出对应的目的地主题
     * @return 目的地主题对象
     */
    DestTheme getByPrimaryKey(Long id);

    /**
     * 获取不同层级下的目的地主题层次土司
     * @return
     */
    List<DestTheme> getToasts(DestThemeQuery qo);

    /**
     * 保存或者更新D
     */
    void saveOrUpdate(DestTheme destTheme);

    /**
     * 查询指定层级的所有目的地主题
     * @param deep 层级
     * @return 目的地主题集合
     */
    List<DestTheme> listThemesByDeep(int deep);
}
